// 参数

/**
 * 无数据参数
 * @description 无数据参数
 */
class NoneParam {
  // 构造函数
  constructor() {
  }
  // 创建参数
  static create() {
    return new NoneParam()
  }
  // 创建参数
  static of() {
    return new NoneParam()
  }
}

/**
 * 值参数
 * @description 简单参数,直接将参数值赋值给参数
 */
class ValueParam<T> {
  // 参数值
  value: T
  // 构造函数
  constructor(value: T) {
    this.value = value
  }
  // 创建参数
  static create<T>(value: T) {
    return new ValueParam(value)
  }
  // 创建参数
  static of<T>(value: T) {
    return new ValueParam(value)
  }
}

/**
 * 分页参数
 * @description 分页参数
 */
class PageParam {
  // 页码
  page: number = 1
  // 每页数量
  pageSize: number = 10
  constructor(page: number, pageSize: number) {
    this.page = page
    this.pageSize = pageSize
  }
  // 创建参数
  static create(page: number, pageSize: number) {
    return new PageParam(page, pageSize)
  }
  // 创建参数
  static of(page: number, pageSize: number) {
    return new PageParam(page, pageSize)
  }
}

/**
 * id参数
 * @description id参数
 */
class IdParam<T> {
  // id
  id: T
  // 构造函数
  constructor(id: T) {
    this.id = id
  }
  // 创建参数
  static create<T>(id: T) {
    return new IdParam(id)
  }
  // 创建参数
  static of<T>(id: T) {
    return new IdParam(id)
  }
}

/**
 * id列表参数
 * @description id列表参数
 */
class IdListParam<T> {
  // id列表
  idList: T[]
  // 构造函数
  constructor(idList: T[]) {
    this.idList = idList
  }
  // 创建参数
  static create<T>(idList: T[]) {
    return new IdListParam(idList)
  }
  // 创建参数
  static of<T>(idList: T[]) {
    return new IdListParam(idList)
  }
}

/**
 * 编码参数
 * @description 编码参数
 */
class CodeParam<T> {
  // 验证码
  code: T
  // 构造函数
  constructor(code: T) {
    this.code = code
  }
  // 创建参数
  static create<T>(code: T) {
    return new CodeParam(code)
  }
  // 创建参数
  static of<T>(code: T) {
    return new CodeParam(code)
  }
}

/**
 * 编码列表参数
 * @description 编码列表参数
 */
class CodeListParam<T> {
  // 编码列表
  codeList: T[]
  // 构造函数
  constructor(codeList: T[]) {
    this.codeList = codeList
  }
  // 创建参数
  static create<T>(codeList: T[]) {
    return new CodeListParam(codeList)
  }
  // 创建参数
  static of<T>(codeList: T[]) {
    return new CodeListParam(codeList)
  }
}

/**
 * 排序参数
 * @description 排序参数
 */
class SortParam {
  // 排序字段
  field: string
  // 排序方向
  direction: "asc" | "desc"
  // 构造函数
  constructor(field: string, direction: "asc" | "desc") {
    this.field = field
    this.direction = direction
  }
  // 创建参数
  static create(field: string, direction: "asc" | "desc") {
    return new SortParam(field, direction)
  }
  // 创建参数
  static of(field: string, direction: "asc" | "desc") {
    return new SortParam(field, direction)
  }
}

/**
 * 搜索排序分页参数
 * @description 搜索排序分页参数
 */
class SearchSortPageParam<S> {
  // 搜索参数
  search: S
  // 排序参数
  sort: SortParam[]
  // 分页参数
  page: PageParam
  // 构造函数
  constructor(search: S, sort: SortParam[], page: PageParam) {
    this.search = search
    this.sort = sort
    this.page = page
  }
  // 创建参数
  static create(search: any, sort: SortParam[], page: PageParam) {
    return new SearchSortPageParam(search, sort, page)
  }
  // 创建参数
  static of(search: any, sort: SortParam[], page: PageParam) {
    return new SearchSortPageParam(search, sort, page)
  }
}

/**
 * 手机号参数
 * @description 手机号参数
 */
class MobileParam {
  // 手机号
  mobile: string
  // 构造函数
  constructor(mobile: string) {
    this.mobile = mobile
  }
  // 创建参数
  static create(mobile: string) {
    return new MobileParam(mobile)
  }
  // 创建参数
  static of(mobile: string) {
    return new MobileParam(mobile)
  }
}

/**
 * 邮箱参数
 * @description 邮箱参数
 */
class EmailParam {
  // 邮箱
  email: string
  // 构造函数
  constructor(email: string) {
    this.email = email
  }
  // 创建参数
  static create(email: string) {
    return new EmailParam(email)
  }
  // 创建参数
  static of(email: string) {
    return new EmailParam(email)
  }
}

/**
 * 用户名密码登录参数
 * @description 用户名密码登录参数
 */
class UsernamePasswordLoginParam {
  // 用户名
  username: string
  // 密码
  password: string
  // 验证码
  code: string

  constructor(username: string, password: string, code: string) {
    this.username = username
    this.password = password
    this.code = code
  }
  // 创建参数
  static create(username: string, password: string, code: string) {
    return new UsernamePasswordLoginParam(username, password, code)
  }
  // 创建参数
  static of(username: string, password: string, code: string) {
    return new UsernamePasswordLoginParam(username, password, code)
  }
}

/**
 * 手机号验证码登录参数
 * @description 手机号验证码登录参数
 */
class MobileVerifyLoginParam {
  // 手机号
  mobile: string
  // 验证码
  verifyCode: string
  // 构造函数
  constructor(mobile: string, verifyCode: string) {
    this.mobile = mobile
    this.verifyCode = verifyCode
  }
  // 创建参数
  static create(mobile: string, verifyCode: string) {
    return new MobileVerifyLoginParam(mobile, verifyCode)
  }
  // 创建参数
  static of(mobile: string, verifyCode: string) {
    return new MobileVerifyLoginParam(mobile, verifyCode)
  }
}

/**
 * 邮箱验证码登录参数
 * @description 邮箱验证码登录参数
 */
class EmailVerifyLoginParam {
  // 邮箱
  email: string
  // 验证码
  code: string
  // 构造函数
  constructor(email: string, code: string) {
    this.email = email
    this.code = code
  }
  // 创建参数
  static create(email: string, code: string) {
    return new EmailVerifyLoginParam(email, code)
  }
  // 创建参数
  static of(email: string, code: string) {
    return new EmailVerifyLoginParam(email, code)
  }
}

// 导出
export {
  CodeListParam, CodeParam, EmailVerifyLoginParam, IdListParam, IdParam,
  MobileVerifyLoginParam, NoneParam, PageParam, SearchSortPageParam, SortParam,
  UsernamePasswordLoginParam, ValueParam, MobileParam, EmailParam
}

